为了提高列存模式下的压缩效率,降低存储成本,您可以为创建的列存索引设置压缩算法。本文介绍如何设置和修改列存索引的压缩算法。
支持的压缩算法
当前PolarDB MySQL版支持两种IMCI的压缩算法:LZ4压缩、ZSTD压缩。
LZ4:一种无损数据压缩算法,压缩速度大于每核500 MB/s。具体可参见LZ4 GitHub。
ZSTD(全称Zstandard):一种无损数据压缩算法,压缩速度与LZ4相当。具体可参见Zstandard GitHub。
建表时设置压缩算法
语法:
在建表时,您只需要在CREATE TABLE语句的COMMENT字段里设置codec_opt参数,即可设置IMCI的压缩算法。
COMMENT 'COLUMNAR=1 codec_opt={LZ4}'
codec_opt有效的取值为
LZ4
、ZSTD
和NONE
,对应LZ4压缩、ZSTD压缩和不使用压缩。说明imci_default_codec参数定义了缺省压缩算法。当COMMENT中缺省codec_opt时,将根据该参数的值采用对应的压缩算法。该参数默认值为
ZSTD
。您可以执行SET命令在SESSION级别修改imci_default_codec的值。
在表的COMMENT字段中指定的压缩算法将应用在表的所有列索引上。如果同时在列的COMMENT中设置了压缩算法,将以列的配置优先。
示例:
CREATE TABLE t12( col1 INT, col2 DATETIME, col3 VARCHAR(200) ) ENGINE InnoDB COMMENT 'COLUMNAR=1 codec_opt={LZ4}'; SET imci_default_codec="{LZ4}"; CREATE TABLE t13( col1 INT COMMENT 'codec_opt={NONE}', col2 DATETIME, col3 VARCHAR(200) 'codec_opt={ZSTD}' ) ENGINE InnoDB COMMENT 'COLUMNAR=1';
从以上示例中可以看到:
表
t12
使用COMMENT字段指定了表的默认压缩算法为LZ4。col1、col2和col3列的数据都使用LZ4算法进行压缩。表
t13
未设置表的压缩算法,col1单独配置为不开启压缩;col2未设置codec_opt,将使用参数imci_default_codec配置的压缩算法,使用LZ4算法压缩;col3设置codec_opt={ZSTD},由于列的配置优先级高于表以及默认配置,因此col3使用ZSTD压缩算法。
修改列的压缩算法
目前尚不支持修改单列数据的压缩算法。若要修改,需要删除原来的数据,再使用新的建表语句,指定列的新压缩算法。修改单列数据的压缩方式将在后续版本中推出。
示例:
CREATE TABLE t14(
col1 INT COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col2 DATETIME COMMENT 'COLUMNAR=1 codec_opt={ZSTD}',
col3 VARCHAR(200)
) ENGINE InnoDB;
-- 修改列存索引的压缩算法
ALTER TABLE t14 COMMENT 'COLUMNAR=1', MODIFY COLUMN col2 DATETIME COMMENT 'codec_opt={LZ4}';
在以上示例中,表t14
的col2列上已经建立列索引,压缩算法为ZSTD。若执行示例中的命令尝试将其修改为LZ4,不会立即生效,需要重建数据时才会生效。由于该命令不会触发数据重建,因此数据(包括后续新增数据)仍使用之前的指定的压缩方式。